import axios from "axios";
import {getTokenName, messageTip, removeToken, messageConfirm} from "../util/util.js";
import {ElMessage, ElMessageBox} from "element-plus";

//定义后端接口地址的前缀
axios.defaults.baseURL = "http://localhost:8088/";

export function doGet(url, params) {
    return axios({
        method: 'get',
        url: url,
        params: params,
        datatype: 'json'
    })
}

export function doPost(url, data) {
    return axios({
        method: 'post',
        url: url,
        data: data,
        datatype: 'json'
    })

}

export function doPut(url, data) {
    return  axios({
        method: 'put',
        url: url,
        data: data,
        datatype: 'json'
    })

}

export function doDelete(url, params) {
    return axios({
        method: 'delete',
        url: url,
        params: params,
        datatype: 'json'
    })
}


// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么，在请求头中放一个token（jwt），纯给后端接口
    let token = window.sessionStorage.getItem(getTokenName());
    if (!token) {//表示token不存在
        token = window.localStorage.getItem(getTokenName());
        if (token){
            config.headers['rememberMe'] = true;
        }
    }
    if (token) {//表示token存在
        config.headers['Authorization'] = token;
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    if (response.data.code > 900) {//code>900说明token验证没通过
        //给前端用户提示，并且跳转页面
        messageConfirm(response.data.msg + "，是否重新去登录？").then(() => {//用户点击“确定”按钮就会触发then函数
            removeToken();//验证不通过，清除token
            //跳转到登陆页面
            window.location.href = "/";
        }).catch(() => {//用户点击“取消”按钮就会触发catch函数
            messageTip("取消去登录","warning");
        })
        return;
    }

    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});
